:tocdepth: 3 .. contents:: **************************** CUBRID 2008 R4.4 릴리스 노트 **************************** 릴리스 노트 정보 ================ 본 문서는 CUBRID 2008 R4.4(빌드번호 8.4.4.0227)에 관한 정보를 포함한다. CUBRID 2008 R4.4는 CUBRID 2008 R4.3에서 발견된 오류 수정 및 기능 개선과 이전 버전들에 반영된 모든 오류 수정 및 기능 개선을 포함한다. CUBRID 2008 R4.3을 포함한 이전 버전에 대한 정보는 http://release.cubrid.org/ko\ 에서 확인할 수 있다. 릴리스 특징 =========== CUBRID 2008 R4.4는 CUBRID 2008 R4.3을 안정화하고 운영 편의성을 개선한 업그레이드 버전이다. CUBRID 2008 R4.4는 CUBRID 2008 R4.3과 데이터베이스 볼륨이 호환되므로 데이터베이스를 마이그레이션하지 않아도 되며, 이와 관련하여 :doc:`/upgrade` 절을 참고한다. 운영 편의성 개선 ---------------- * SQL 프로파일링 기능을 추가했다. * 각종 상태 정보 출력 또는 트랜잭션 관리 등을 수행하는 CUBRID 운영 도구(유틸리티)의 기능을 추가 또는 개선했다. * 각종 상태 정보의 확인이 용이하도록 로그 메시지를 강화했다. HA 복제 안정화 -------------- * 특정 질의문에 대해 복제가 되지 않는 현상들을 수정했다. * 접속 오류 또는 복제 지연 현상들을 수정했다. Sharding 기능 개선 및 안정화 ---------------------------- * SHARD key에 해당하는 shard ID를 확인할 수 있도록 하는 명령을 추가했다. * SHARD proxy에 대한 CAS의 개수가 동적으로 조정될 수 있도록 수정했다. * 접속 오류 또는 질의 처리 오류 등을 수정했다. 동작 변경 --------- * 레코드가 있는 테이블에 "ALTER .. ADD COLUMN" 수행 시 PRIMARY KEY 또는 NOT NULL 제약 조건을 위배하는 경우가 없도록 수정했다. * 브로커 파라미터인 SELECT_AUTO_COMMIT이 제거되었다. * 브로커 파라미터 APPL_SERVER_MAX_SIZE_HARD_LIMIT의 값의 범위가 1과 2,097,151 사이의 값으로 제한되었다. * SQL 로그 파일 크기를 지정하는 브로커 파라미터 SQL_LOG_MAX_SIZE의 기본 설정값이 100MB에서 10MB로 변경되었다. * JDBC에서 연결 URL의 zeroDateTimeBehavior 속성 값이 "round"일 때, TIMESTAMP의 zero date를 '0001-01-01 00:00:00'에서 '1970-01-01 00:00:00'(GST)로 변경했다. 설정 ---- * 시간 또는 용량을 입력하는 파라미터에 시간 단위 또는 용량 단위를 지정할 수 있게 했다. 드라이버 호환성 --------------- * 2008 R4.4 버전의 JDBC와 CCI 드라이버는 2008 R4.3 또는 이전 버전의 CUBRID DB 서버와 호환된다. 보다 자세한 변경 사항은 아래의 내용을 참고하며, 이전 버전 사용자는 :ref:`changed-behaviors844` 절과 :ref:`new-cautions844` 절을 반드시 확인하도록 한다. 기능 추가 ========= 운영 편의성 ----------- .. 4.4new SQL 프로파일링 기능 추가(CUBRIDSUS-10984) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 질의 성능 분석을 위한 SQL 프로파일링(profiling) 기능을 추가했다. 다음과 같이 "SET TRACE ON" 문장을 실행하고 질의를 실행한 후, "SHOW TRACE" 문장을 실행하면 SQL 프로파일링 정보가 출력된다. :: csql> SET TRACE ON; csql> SELECT /*+ RECOMPILE */ o.host_year, o.host_nation, o.host_city, n.name, SUM(p.gold), SUM(p.silver), SUM(p.bronze) FROM OLYMPIC o, PARTICIPANT p, NATION n WHERE o.host_year = p.host_year AND p.nation_code = n.code AND p.gold > 10 GROUP BY o.host_nation; csql> SHOW TRACE; trace ====================== ' Query Plan: SORT (group by) NESTED LOOPS (inner join) NESTED LOOPS (inner join) TABLE SCAN (o) INDEX SCAN (p.fk_participant_host_year) (key range: (o.host_year=p.host_year)) INDEX SCAN (n.pk_nation_code) (key range: p.nation_code=n.code) rewritten query: select o.host_year, o.host_nation, o.host_city, n.[name], sum(p.gold), sum(p.silver), sum(p.bronze) from OLYMPIC o, PARTICIPANT p, NATION n where (o.host_year=p.host_year and p.nation_code=n.code and (p.gold> ?:0 )) group by o.host_nation Trace Statistics: SELECT (time: 1, fetch: 1059, ioread: 2) SCAN (table: olympic), (heap time: 0, fetch: 26, ioread: 0, readrows: 25, rows: 25) SCAN (index: participant.fk_participant_host_year), (btree time: 1, fetch: 945, ioread: 2, readkeys: 5, filteredkeys: 5, rows: 916) (lookup time: 0, rows: 38) SCAN (index: nation.pk_nation_code), (btree time: 0, fetch: 76, ioread: 0, readkeys: 38, filteredkeys: 38, rows: 38) (lookup time: 0, rows: 38) GROUPBY (time: 0, sort: true, page: 0, ioread: 0, rows: 5) ' tranlist 유틸리티 추가(CUBRIDSUS-9601) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 데이터베이스의 트랜잭션 정보를 출력하는 cubrid tranlist 유틸리티를 추가했다. DBA 또는 DBA 그룹에 속한 사용자만 사용할 수 있다. :: % cubrid tranlist -s testdb Tran index User name Host name Process id Program name ------------------------------------------------------------------------------------- 1(ACTIVE) PUBLIC myhost 1822 broker1_cub_cas_1 2(ACTIVE) dba myhost 1823 broker1_cub_cas_2 3(COMMITTED) dba myhost 1824 broker1_cub_cas_3 ------------------------------------------------------------------------------------- .. 4.4new tranlist 명령에 지정된 칼럼으로 정렬하여 출력하는 기능 추가(CUBRIDSUS-9655) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "cubrid tranlist"에 지정된 칼럼으로 정렬하여 출력하는 기능을 추가했다. 다음은 네 번째 칼럼인 "Process id"를 지정하여 정렬한 정보를 출력하는 예이다. :: % cubrid tranlist --sort-key=4 tdb Tran index User name Host name Process id Program name Query time Tran time Wait for lock holder SQL_ID SQL Text -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1(ACTIVE) PUBLIC myhost 20080 query_editor_cub_cas_1 0.00 0.00 -1 *** empty *** 3(ABORTED) PUBLIC myhost 20081 query_editor_cub_cas_2 0.00 0.00 -1 *** empty *** 2(ACTIVE) PUBLIC myhost 20082 query_editor_cub_cas_3 0.00 0.00 -1 *** empty *** 4(ACTIVE) PUBLIC myhost 20083 query_editor_cub_cas_4 1.80 1.80 2, 3, 1 cdcb58552e320 update ta set a=5 where a > ? -------------------------------------------------------------------------------------------------------------------------------------------------------------- Tran index : 4 update ta set a=5 where a > ? killtran 유틸리티에 특정 SQL을 수행 중인 트랜잭션을 제거할 수 있는 옵션 추가(CUBRIDSUS-9653) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "cubrid killtran" 유틸리티에 SQL ID를 통해 특정 트랜잭션을 제거하는 --kill-sql-id 옵션을 추가했다. :: % cubrid killtran --query-exec-info testdb Tran index Process id Program name Query time Tran time Wait for lock holder SQL ID SQL Text -------------------------------------------------------------------------------------------------------------------------------------------- 1(ACTIVE) 26650 query_editor_cub_cas_1 0.00 0.00 -1 *** empty *** 2(ACTIVE) 26652 query_editor_cub_cas_3 0.00 0.00 -1 *** empty *** 3(ACTIVE) 26651 query_editor_cub_cas_2 0.00 0.00 -1 *** empty *** 4(ACTIVE) 26653 query_editor_cub_cas_4 1.80 1.80 2, 1, 3 cdcb58552e320 update ta set a = 5 where a > 0 -------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID: cdcb58552e320 Tran index : 4 update ta set a = 5 where a > 0 % cubrid killtran --kill-sql-id=cdcb58552e320 -f testdb killtran 유틸리티에 여러 트랜잭션을 한꺼번에 종료할 수 있도록 -i 옵션 확장(CUBRIDSUS-9601) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "cubrid killtran" 유틸리티의 -i 옵션에 강제 종료하고자 하는 트랜잭션 ID들을 쉼표로 구분하여 입력할 수 있도록 확장하였다. :: % cubrid killtran -i 1,3,8 testdb .. 7771 in 9.1 브로커 및 샤드의 실행중인 파라미터 정보를 확인하는 명령 추가(CUBRIDSUS-10901) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 브로커의 실행 중인 파라미터 정보를 확인하는 "cubrid broker info" 명령과 샤드의 파라미터 정보를 확인하는 "cubrid shard info" 명령을 추가했다. .. 4.4new 질의 성능에 영향을 주는 상태를 기록하는 이벤트 로그 파일 추가(CUBRIDSUS-10986) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 질의 성능에 영향을 주는 SLOW_QUERY, MANY_IOREADS, LOCK_TIMEOUT, DEADLOCK, TEMP_VOLUME_EXPAND 상태를 기록하는 별도의 이벤트 로그 파일을 추가했다. 보다 자세한 사항은 매뉴얼의 :ref:`server-event-log` 절을 참고한다. .. 4.4new HA 상태 출력 시 cub_master 로그 파일에 각 노드 정보를 포함하도록 수정(CUBRIDSUS-11113) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ split-brain, fail-over, fail-back이 발생하면 cub_master 프로세스의 로그 파일에 각 노드 정보를 포함하여 기록하도록 수정했다. 해당 로그 파일은 $CUBRID/log/.cub_master.err로 존재한다. split-brain 상태를 해소하기 위해 스스로 종료하는 마스터 노드의 cub_master 로그 파일은 다음과 같이 노드 정보를 포함한다. :: Time: 05/31/13 17:38:29.138 - ERROR *** file ../../src/executables/master_heartbeat.c, line 714 ERROR CODE = -988 Tran = -1, EID = 19 Node event: More than one master detected and local processes and cub_master will be terminated. Time: 05/31/13 17:38:32.337 - ERROR *** file ../../src/executables/master_heartbeat.c, line 4493 ERROR CODE = -988 Tran = -1, EID = 20 Node event:HA Node Information ================================================================================ * group_id : hagrp host_name : testhost02 state : unknown -------------------------------------------------------------------------------- name priority state score missed heartbeat -------------------------------------------------------------------------------- testhost03 3 slave 3 0 testhost02 2 master 2 0 testhost01 1 master -32767 0 ================================================================================ fail-over 후 마스터로 변경되는 노드 혹은 fail-back 후 슬레이브로 변경되는 노드의 cub_master 로그 파일은 다음과 같이 노드 정보를 포함한다. :: Time: 06/04/13 15:23:28.056 - ERROR *** file ../../src/executables/master_heartbeat.c, line 957 ERROR CODE = -988 Tran = -1, EID = 25 Node event: Failover completed. Time: 06/04/13 15:23:28.056 - ERROR *** file ../../src/executables/master_heartbeat.c, line 4484 ERROR CODE = -988 Tran = -1, EID = 26 Node event: HA Node Information ================================================================================ * group_id : hagrp host_name : testhost02 state : master -------------------------------------------------------------------------------- name priority state score missed heartbeat -------------------------------------------------------------------------------- testhost03 3 slave 3 0 testhost02 2 to-be-master -4094 0 testhost01 1 unknown 32767 0 ================================================================================ HA -- .. 4.4new "cubrid heartbeat stop" 명령 실행 시 -i 옵션 추가 및 절체 방식 변경(CUBRIDSUS-9572) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "cubrid heartbeat stop" 명령을 수행하면 기존에는 HA 서버와 유틸리티들이 모두 종료될 때까지 기다린 후 절체가 진행되었으며, 일정 시간 동안 서버 프로세스와 유틸리티들이 스스로 종료되지 않으면 강제 종료시켰다. 하지만 수정 후에는 서버 프로세스가 미처 종료되지 않았어도 종료 과정 중 복제 불일치를 발생시키지 않는 상황이 되면, 남아있는 유틸리티들을 종료하고 즉시 절체를 진행한다. 수정 이후 서버 프로세스가 강제 종료되지 않기 때문에 HA 재구동 시 DB 복구 시간이 들지 않게 되었다. 수정 버전에서 "cubrid heartbeat stop" 명령에 -i 옵션이 주어지는 경우 서버와 유틸리티들을 즉시 종료시키고 절체를 진행한다. Sharding -------- Shard key로 해당 shard ID 값을 얻는 "cubrid shard getid" 명령 추가(CUBRIDSUS-9547) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Shard key로 해당 shard id를 얻는 "cubrid shard getid" 명령을 추가했다. 다음은 shard1이라는 shard proxy에서 shard key 1에 대한 shard ID 정보를 출력하는 명령이다. :: % cubrid shard getid -b shard1 1 -f 옵션을 통해 shard id에 대한 전체 정보를 출력할 수 있다. :: % cubrid shard getid -b shard1 -f 1 .. 4.4new cci_set_db_parameter 함수를 사용할 수 있도록 수정(CUBRIDSUS-10125) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SHARD 환경에서 cci_set_db_parameter 함수를 사용할 수 있도록 수정했다. 이로 인해, SHARD 환경에서 isolation level, lock timeout을 설정할 수 있게 되었다. .. 4.4new shard DB의 암호를 환경 변수로 지정할 수 있도록 수정(CUBRIDSUS-11570) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ shard.conf의 SHARD_DB_PASSWORD를 환경 변수로 지정할 수 있도록 수정했다. shard.conf에 SHARD_DB_PASSWORD를 노출시키고 싶지 않은 경우 환경 변수를 사용할 수 있다. 환경 변수 이름의 형식은 "_SHARD_DB_PASSWORD"이며, 이 shard1이면 환경 변수의 이름은 SHARD1_SHARD_DB_PASSWORD가 된다. :: export SHARD1_SHARD_DB_PASSWORD=shard123 설정 ---- .. 4.4new, 4.4only "cubrid service" 명령으로 shard 관련 프로세스들도 시작 또는 종료할 수 있도록 수정(CUBRIDSUS-10078) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cubrid.conf의 "service" 파라미터에 "shard"를 추가하여, "cubrid service" 명령으로 shard 관련 프로세스들도 시작 또는 종료할 수 있도록 수정했다. .. 4.4new 복제 로그의 최대 보존 개수를 조절하는 파라미터 추가(CUBRIDSUS-11377) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 복제 로그의 최대 보존 개수를 조절하는 ha_copy_log_max_archives 파라미터를 추가했다. 수정 이전 버전에서는 log_max_archives 파라미터를 통해서 트랜잭션 보관 로그 파일의 최대 보존 개수와 복제 로그 파일의 최대 보존 개수를 모두 지정했다. .. 4.4new 잠금 에스컬레이션 발생 시 트랜잭션의 롤백 여부를 지정하는 시스템 파라미터 추가(CUBRIDSUS-11384) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 잠금 에스컬레이션 발생 시 트랜잭션의 롤백 여부를 지정하는 rollback_on_lock_escalation 파라미터를 추가했다. 이 파라미터가 yes로 설정되면, 잠금 에스컬레이션 발생 시점에 에스컬레이션 없이 에러 로그를 기록하고, 해당 잠금 요청은 실패하면서 트랜잭션을 롤백한다. no로 설정되면 기존처럼 잠금 에스컬레이션이 수행되고 트랜잭션을 계속 진행한다. .. _changed-behaviors844: 동작 변경 ========= SQL --- .. 4.4new 레코드가 있는 테이블에 ALTER 문으로 기본 값 없는 칼럼 추가 시 PRIMARY KEY 또는 NOT NULL 제약 조건을 위배하는 경우가 발생하지 않도록 수정(CUBRIDSUS-9725) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ALTER ... ADD COLUMN 문을 통해 기본 값이 없는 칼럼을 추가할 때 추가된 칼럼의 값이 모두 NULL이 되면서 PRIMARY KEY 또는 NOT NULL 제약 조건을 위배하는 경우가 발생하지 않도록 수정했다. 수정된 버전에서는 * 레코드가 있는 테이블에 추가하려는 칼럼의 제약 조건이 PRIMARY KEY이면 에러를 반환하고, * 추가하려는 칼럼의 제약 조건이 NOT NULL이고 cubrid.conf의 add_column_update_hard_default 설정값이 no이면 에러를 반환한다. 드라이버 -------- .. 4.4new [JDBC] 연결 URL의 zeroDateTimeBehavior 속성 값이 "round"일 때 TIMESTAMP의 zero date를 '0001-01-01 00:00:00'에서 '1970-01-01 00:00:00'(GST)로 변경(CUBRIDSUS-11612) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 연결 URL의 zeroDateTimeBehavior 속성 값이 "round"일 때 TIMESTAMP의 zero date를 '0001-01-01 00:00:00'에서 '1970-01-01 00:00:00'(GST)로 변경하도록 수정했다. .. 4.4new [JDBC][CCI] 배치 처리 함수에 질의 타임아웃 적용(CUBRIDSUS-10088) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CCI의 cci_execute_batch 함수나 cci_execute_array 함수를 사용하거나, cci_execute 함수에 CCI_EXEC_QUERY_ALL 플래그를 지정하거나, JDBC의 executeBatch 메서드를 사용하는 경우에 질의 타임아웃(queryTimeout)이 적용되도록 수정했다. 배치 처리 함수에 대한 질의 타임아웃은 개별적인 SQL 단위가 아니라, 함수(또는 메서드) 단위로 적용된다. 유틸리티 -------- "cubrid broker status" 명령 변경(CUBRIDSUS-9602) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "cubrid broker status" 명령을 통해 브로커의 상태를 출력할 때 아래와 같이 몇 가지 사항이 추가 또는 변경되었다. * "cubrid broker status SERVICE=ON" 명령을 실행하면 구동 중인 브로커의 상태만 출력하게 되었다. :: $ cubrid broker status SERVICE=ON % query_editor ---------------------------------------------------------------------- ID PID QPS LQS PSIZE STATUS ---------------------------------------------------------------------- 1 20370 0 0 52456 IDLE 2 20371 0 0 52456 IDLE 3 20372 0 0 52456 IDLE 4 20373 0 0 52456 IDLE 5 20374 0 0 52456 IDLE * -b 옵션으로 브로커 상태 출력 시 * 브로커 이름은 최대 20자까지만 출력하고, 이를 초과하는 경우 이름 뒤에 ...을 출력한다. * REQ 항목은 더 이상 출력하지 않는다. * QPS, TPS 항목 출력 시 UINT64 최대 값까지 출력한다. 수정 이전에는 해당 항목이 음수로 출력되는 경우가 존재했다. * 브로커 응용 서버(CAS) 별 응용 프로그램 연결 개수의 합을 출력하는 #CONNECT가 추가되었다. * 질의 종류 별 수행 회수를 출력하는 SELECT, INSERT, UPDATE, DELETE, OTHERS 항목을 추가하게 되었다. 단, -f 옵션이 있는 경우는 해당 항목들이 출력되지 않는다. * 고유 키 위반 오류 회수를 출력하는 UNIQUE-ERR-Q 항목이 추가되었다. * -b 옵션 없이 브로커 상태 출력 시 * STATUS 항목 출력 시 "CLIENT WAIT", "CLOSE WAIT"가 각각 "CLIENT_WAIT", "CLOSE_WAIT"로 출력되도록 변경되었다. * 브로커 설정 정보가 출력에서 제외되었다. * -l 옵션 사용 시 상태가 "CLOSE_WAIT"인 CAS의 정보는 출력에서 제외되었다. .. _changed-config844: 설정 ---- .. page_flush_interval, index_scan_key_buffer_pages은 내부 파라미터로 매뉴얼 노출 안 됨 .. 9.2에서 PROXY_LOG_MAX_SIZE, PROXY_TIMEOUT은 이름이 바뀌며, 브로커 파라미터로 통합됨. .. 4.4new, 9.2-11456 시간 또는 용량을 입력하는 파라미터에 시간 단위 또는 용량 단위를 지정할 수 있도록 수정(CUBRIDSUS-10412) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 시간 또는 용량을 입력하는 시스템(cubrid.conf), 브로커(cubrid_broker.conf), 그리고 샤드(shard.conf) 파라미터의 값에 시간 단위 또는 용량 단위를 지정할 수 있도록 수정했다. 아래 표에서 왼쪽의 파라미터는 사용을 권장하지 않으며, 대신 오른쪽의 파라미터를 사용할 것을 권장한다. ============================== ============================== deprecated new ============================== ============================== lock_timeout_in_secs lock_timeout checkpoint_every_npages checkpoint_every_size checkpoint_interval_in_mins checkpoint_interval max_flush_pages_per_second max_flush_size_per_second sync_on_nflush sync_on_flush_size sql_trace_slow_msecs sql_trace_slow ============================== ============================== 파라미터의 입력 단위 및 의미는 다음과 같다. +------+-----------+--------------+ | 구분 | 입력 단위 | 의미 | +======+===========+==============+ | 용량 | B | Bytes | | +-----------+--------------+ | | K | Kilobytes | | +-----------+--------------+ | | M | Megabytes | | +-----------+--------------+ | | G | Gigabytes | | +-----------+--------------+ | | T | Terabytes | +------+-----------+--------------+ | 시간 | ms | milliseconds | | +-----------+--------------+ | | s | seconds | | +-----------+--------------+ | | min | minutes | | +-----------+--------------+ | | h | hours | +------+-----------+--------------+ 단위를 사용하는 파라미터 및 해당 파라미터가 허용하는 단위는 다음과 같다. +-----------+---------------------------------+---------------+ | 구분 | 파라미터 이름 | 허용 단위 | +===========+=================================+===============+ | 시스템 | backup_volume_max_size_bytes | B,K,M,G,T | | +---------------------------------+---------------+ | | checkpoint_every_size | B,K,M,G,T | | +---------------------------------+---------------+ | | checkpoint_interval | ms, s, min, h | | +---------------------------------+---------------+ | | group_concat_max_len | B,K,M,G,T | | +---------------------------------+---------------+ | | lock_timeout | ms, s, min, h | | +---------------------------------+---------------+ | | max_flush_size_per_second | B,K,M,G,T | | +---------------------------------+---------------+ | | sql_trace_slow | ms, s, min, h | | +---------------------------------+---------------+ | | sync_on_flush_size | B,K,M,G,T | | +---------------------------------+---------------+ | | string_max_size_bytes | B,K,M,G,T | | +---------------------------------+---------------+ | | thread_stacksize | B,K,M,G,T | +-----------+---------------------------------+---------------+ | 브로커 | APPL_SERVER_MAX_SIZE_HARD_LIMIT | B, K, M, G | | +---------------------------------+---------------+ | | LONG_QUERY_TIME | ms, s, min, h | | +---------------------------------+---------------+ | | LONG_TRANSACTION_TIME | ms, s, min, h | | +---------------------------------+---------------+ | | MAX_QUERY_TIMEOUT | ms, s, min, h | | +---------------------------------+---------------+ | | SESSION_TIMEOUT | ms, s, min, h | | +---------------------------------+---------------+ | | SQL_LOG_MAX_SIZE | B, K, M, G | | +---------------------------------+---------------+ | | TIME_TO_KILL | ms, s, min, h | +-----------+---------------------------------+---------------+ | 샤드 | PROXY_LOG_MAX_SIZE | B, K, M, G | | +---------------------------------+---------------+ | | PROXY_TIMEOUT | ms, s, min, h | +-----------+---------------------------------+---------------+ 시스템 파라미터 sort_buffer_size의 최대 크기를 2G로 제한(CUBRIDSUS-9582) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 시스템 파라미터인 sort_buffer_size의 최대 크기를 2G로 제한했다. 수정 이전 버전에서 sort_buffer_size의 크기를 2G보다 크게 설정하고, 인덱스 생성과 같은 정렬이 필요한 작업에서 2G보다 큰 sort_buffer를 사용하게 되면 해당 작업이 비정상 종료되었다. 브로커 파라미터 KEEP_CONNECTION에서 OFF 옵션 사용 금지(CUBRIDSUS-5316) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2008 R4.4 이하 버전에서 해당 파라미터의 값을 OFF로 설정하면 사용자 정의 변수, LAST_INSERT_ID, ROW_COUNT, PREPARE 문이 정상 수행되지 않으므로, 사용을 금한다. APPL_SERVER_MAX_SIZE_HARD_LIMIT 브로커 파라미터 변경(CUBRIDSUS-10260) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 브로커 파라미터 APPL_SERVER_MAX_SIZE_HARD_LIMIT의 값의 범위를 1과 2,097,151 사이의 값으로 제한하고 이를 벗어나는 경우 브로커 구동을 하지 못하도록 수정했다. 이와 함께 broker_changer를 이용해서 APPL_SERVER_MAX_SIZE_HARD_LIMIT의 값을 APPL_SERVER_MAX_SIZE보다 작게 변경하면 경고 메시지를 출력하도록 수정했다. SQL 로그 파일 크기를 지정하는 브로커 파라미터의 기본 설정값을 100MB에서 10MB로 줄임(CUBRIDSUS-9944) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cubrid_broker.conf의 SQL_LOG_MAX_SIZE의 기본 설정값을 100MB에서 10MB로 줄였다. 기존 버전 사용자가 새 버전으로 업그레이드 한 이후에도 기존과 동일한 양의 SQL 로그를 남기고 싶다면 SQL_LOG_MAX_SIZE의 값을 100,000(단위: KB)으로 설정해야 한다. 기타 ---- .. 4.4new 비동기 질의 기능 지원 중단(CUBRIDSUS-11265) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CSQL 인터프리터에서 질의를 수행하거나 cci_execute 함수에 CCI_EXEC_ASYNC 플래그를 지정하여 질의를 수행할 때 중간 질의 결과를 전달받을 수 있는 비동기 질의 기능을 더 이상 지원하지 않는다. 개선 및 오류 수정 ================= 성능 및 최적화 -------------- .. 4.4new 데이터가 매우 작은 상태에서 만든 플랜은 데이터가 증가한 경우 플랜을 다시 만들도록 수정(CUBRIDSUS-3382) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 같은 질의문에 대해 prepare를 재수행할 때 이전에 prepare 한 이후로 변경된 데이터 양이 임계치를 초과하면 질의 계획을 재작성하도록 수정했다. 아래 질의에서 첫 번째 SELECT 문 수행 시 idx1 인덱스를 사용하지만, 두 번째 SELECT 문 수행 시 질의 계획을 재작성하여 idx2 인덱스를 활용하게 된다. .. code-block:: sql CREATE TABLE foo (a INT, b INT, c STRING); INSERT INTO foo VALUES(1, 1, REPEAT('c', 3000)); CREATE UNIQUE INDEX idx1 ON foo (a, c); CREATE INDEX idx2 ON foo (a); SELECT a, b FROM foo WHERE a = 1; -- 1st INSERT INTO foo SELECT a+1, b, c FROM foo; INSERT INTO foo SELECT a+2, b, c FROM foo; INSERT INTO foo SELECT a+4, b, c FROM foo; INSERT INTO foo SELECT a+8, b, c FROM foo; INSERT INTO foo SELECT a+16, b, c FROM foo; INSERT INTO foo SELECT a+32, b, c FROM foo; INSERT INTO foo SELECT a+64, b, c FROM foo; INSERT INTO foo SELECT a+128, b, c FROM foo; SELECT a, b FROM foo WHERE a = 1; -- 2nd .. 4.4new 인덱스 추가 시 해당 인덱스의 통계 정보만 갱신되도록 수정(CUBRIDSUS-10709) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 이전 버전에서는 인덱스 추가 시 기존의 모든 인덱스의 통계 정보가 갱신되면서 시스템의 부하로 작용했으나, 추가되는 인덱스의 통계 정보만 생성하도록 수정했다. .. 9067 브로커 응용 서버(CAS)를 최대 접속 개수까지 구동하는데 소요되는 시간 개선(CUBRIDSUS-10825) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 브로커를 구동하면 처음에는 브로커 파라미터 MIN_NUM_APPL_SERVER 값만큼 CAS가 구동되어 있으며, 해당 CAS와 접속하는 응용 프로그램의 개수가 늘어나면서 최대 MAX_NUM_APPL_SERVER 값까지 CAS가 구동된다. 2008 R4.4, 9.1 버전에서는 MAX_NUM_APPL_SERVER까지 많은 수의 CAS가 구동되는데 소요되는 시간을 개선했다. 예를 들어 MIN_NUM_APPL_SERVER이 100이고 MAX_NUM_APPL_SERVER가 400일 때, 접속을 400개까지 늘리면 브로커가 101 번째 접속부터 CAS를 400개까지 하나씩 늘어나는데 기존에는 30초가 소요되었으나 수정 이후 3초로 줄어들었다. 계층 질의문에서 START WITH 절에 부질의를 조건으로 부여하는 경우 인덱스를 사용하도록 수정(CUBRIDSUS-9613) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql SELECT /*+ RECOMPILE use_idx*/ a, b FROM foo START WITH a IN ( SELECT a FROM foo1 ) CONNECT BY PRIOR a = b; 리소스 ------ 서버 비정상 종료 이후 재시작 시 일시적 임시 볼륨이 제거되지 않는 문제(CUBRIDSUS-10195) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 주기적으로 샤드 상태 정보를 출력하는 명령에 존재했던 메모리 누수 수정(CUBRIDSUS-10393) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 주기적으로 샤드 상태 정보를 출력하는 "cubrid shard status -c -s 1" 명령에 존재했던 메모리 누수(leak)를 수정했다. .. 4.4new 브로커의 SQL_LOG 모드를 동적으로 OFF로 변경했는데도 디스크 쓰기 작업이 계속되는 문제(CUBRIDSUS-10765) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DB 운영 중에 브로커의 SQL_LOG 모드를 ON에서 OFF로 변경해도, SQL 로그로 인한 디스크 쓰기(IO write)가 없어지지 않는 문제를 해결했다. 기존에는 SQL LOG 모드를 동적으로 OFF로 변경하면 디스크에 로그를 쓴 뒤, 파일 포인터를 되돌리는 방식으로 SQL 로그가 써지지 않는 것처럼 동작했으나 수정 후에는 실제로 디스크에 로그가 써지지 않도록 변경했다. .. 4.4new DB 볼륨이 매우 큰 DB의 백업 볼륨을 복구하는 경우 많은 메모리를 사용하는 문제(CUBRIDSUS-11843) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DB 볼륨이 매우 큰 DB의 백업 볼륨을 복구하는 경우 많은 메모리를 사용하는 문제를 수정했다. 예를 들어, 수정 이전 버전에서 DB 페이지 크기가 16KB인 2.2TB 크기의 DB에 대해 수준(level) 0 백업 파일을 복구할 때 최소 8G의 메모리를 필요로 했으나, 수정 이후에는 해당 메모리를 필요로 하지 않는다. 그러나, 수정 이후 버전에서도 수준 1 또는 수준 2 백업 파일을 복구할 때는 많은 메모리가 필요할 수 있다. 안정성 ------ .. 4.4new 인덱스를 스캔하는 질의가 종료되지 않는 현상(CUBRIDSUS-11945) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 인덱스를 스캔하는 질의가 종료되지 않으면서 일시적 임시(temporary temp) 볼륨이 무한히 증가하는 현상을 수정했다. .. 4.4new 롤백 과정에서 인덱스 노드 삭제 도중 오류로 인해 서버 프로세스가 종료된 이후, 데이터베이스 볼륨 복구 과정에서 서버 프로세스가 비정상 종료하는 현상(CUBRIDSUS-10695) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. 4.4new 자동 커밋 OFF인 상태에서 테이블 생성, INSERT와 DELETE를 대량 반복, ROLLBACK을 수행한 상태에서 다시 테이블을 생성한 이후 특정 시점에 DB 볼륨이 비정상이 되는 문제(CUBRIDSUS-11479) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. 4.4new 드라이버 연결 후 DB가 재시작되면 이후 첫 번째 질의 수행에 실패하는 현상(CUBRIDSUS-10773) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 드라이버 연결 후 DB가 재시작되면 이후 첫 번째 질의 수행에서 아래의 오류 메시지와 함께 실패하는 현상을 수정했다. :: Server no longer responding.... Invalid argument Your transaction has been aborted by the system due to server failure or mode change. A database has not been restarted. .. 4.4new CAS의 종료와 시작이 자주 발생하는 상황에서 새로운 접속 요청이 30초 이상 걸리는 문제(CUBRIDSUS-10891) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cubrid_broker.conf의 MIN_NUM_APPL_SERVER 값이 MAX_NUM_APPL_SERVER 보다 작게 설정된 경우, 접속하려는 드라이버 요청의 개수에 따라 CAS가 시작되거나 또는 종료될 수 있다. 이렇게 CAS의 시작과 종료가 자주 발생하는 환경에서, 가끔 새로운 접속 요청이 30초 이상 걸리는 문제를 해결하였다. .. 10009 in aprium 잠금 관리자의 내부 문제로 인해 DB 서버 프로세스의 동작이 멈추는(hang) 현상(CUBRIDSUS-10329)(CUBRIDSUS-11983) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 잠금 관리자의 문제로 인해서 잠금 획득 과정에서 서버 프로세스가 더 이상 진행하지 못하고 멈출 수 있는 문제점과 잠금 대기 과정에서의 내부 오류로 인해서 잠금을 잘못 대기하여 결국 서버가 진행하지 못하는 문제점들을 수정했다. 교착 상태 감지시 발생 가능한 메모리 누수와 서버가 비정상 종료될 수 있는 문제(CUBRIDSUS-10378) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 교착 상태 감지시 특정 상황에서 발생할 수 있는 메모리 누수 문제와 서버가 비정상 종료될 수 있는 문제를 수정했다. 독립 모드에서 새로운 페이지 할당 도중에 체크포인트가 발생하면 오류가 발생할 수 있는 문제(CUBRIDSUS-10444) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 독립(Stand Alone) 모드에서 데이터가 입력되는 등으로 인해 새로운 페이지가 할당되는 도중에 체크포인트가 발생하면 "Skip invalid page in checkpoint." 오류가 발생할 수 있는 문제를 수정했다. CAS가 CLIENT WAIT인 상태에서 동작을 멈출 수 있는 문제(CUBRIDSUS-10238) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CAS가 특정 시점에 시그널로 인해 종료되거나 비정상 종료되면 그 이후로 해당 번호의 CAS 또는 브로커 프로세스가 정상적으로 동작하지 못하고 무한히 대기할 수 있는 문제를 수정했다. CAS에서 DB 서버 에러 수신 도중 네트워크 소켓 에러가 발생하면 CAS가 비정상 종료하는 현상(CUBRIDSUS-10401) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CAS에서 DB 서버 에러를 수신하는 도중에 네트워크 소켓 에러가 발생하는 경우 CAS가 비정상 종료하는 현상을 수정했다. 수정 이전 버전에서 shard.conf의 MAX_NUM_APPL_SERVER(shard CAS 프로세스의 개수를 설정) 값을 cubrid.conf의 max_clients(서버가 허용하는 최대 접속 개수를 설정) 값보다 크게 설정했을 때 "cubrid shard start"를 수행하면 SHARD CAS가 비정상 종료하는 현상이 발생한다. .. 9848 체크포인트 이후에도 보관 로그가 정리되지 않는 현상(CUBRIDSUS-10757) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 복구 시간 단축을 위해 데이터를 DB 볼륨에 갱신(flush)하는 체크포인트 수행 이후에도 보관 로그가 정리되지 않는 현상을 수정했다. 데이터의 갱신이 빈번한 상황에서 체크포인트가 수행되면 이 현상이 발생할 가능성이 높다. 수정 이전 버전에서는 해당 현상 발생 시 체크포인트 발생 시점이 갱신되지 않아 보관 로그를 유지해야 했으나, 수정 이후 체크포인트 발생 시점 이전의 보관 로그는 정리될 수 있도록 수정했다. .. 4.4new Windows에서 DB 서버를 재시작할 때 멈춰있는(hang) 문제(CUBRIDSUS-12028) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Windows에서 DB 서버를 재시작할 때 멈춰있는 문제를 수정했다. 이 문제는 Windows XP 이하, Windows 2003 이하 버전에서만 발생하며, Windows 7, Windows 2008에서는 발생하지 않는다. SQL --- .. 4.4new 새로 생성한 테이블에 대해 커밋하지 않고 PREPARE한 이후, 배열/배치 실행 함수에서 INSERT를 반복 수행하면 실패하는 현상(CUBRIDSUS-10723) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 다중 왼쪽 조인 질의에 WHERE 절 조건이 있으면 잘못된 질의 결과를 출력하는 문제(CUBRIDSUS-8867) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 아래의 예와 같이 왼쪽 조인(left outer join)이 세 번 이상 중첩된 질의에 WHERE 절 조건이 있으면 잘못된 질의 결과를 출력하는 문제를 수정했다. .. code-block:: sql SELECT * FROM tblA LEFT OUTER JOIN tblB ON tblA.pkey = tblB.pkey LEFT OUTER JOIN tblC ON tblB.p2key = tblC.p2key LEFT OUTER JOIN tblD ON tblC.p3key = tblD.p3key WHERE tblD.p3key = 1; AUTO_INCREMENT 칼럼이 있는 테이블을 RENAME할 수 없는 문제(CUBRIDSUS-9691) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AUTO_INCREMENT 속성을 가지는 칼럼을 포함한 테이블의 이름을 변경할 때 오류가 발생되는 문제를 수정했다. 자동 커밋 OFF인 상태에서 테이블 생성 후 고유 키 위반 오류 이후 INSERT 문 재수행 시 -96 오류가 발생하는 현상(CUBRIDSUS-10239) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 자동 커밋 OFF인 상태에서 테이블 생성 후 INSERT 문 수행 도중 고유 키 위반 오류가 발생한 이후, INSERT 문을 재수행하면 -96번 오류가 발생하는 현상을 수정했다. :: % csql testdb --no-auto-commit .. code-block:: sql CREATE TABLE tbl(col1 INTEGER UNIQUE); INSERT INTO tbl SELECT 500 + ROWNUM FROM db_class a, db_class b; INSERT INTO tbl SELECT ROWNUM FROM db_class a, db_class b; :: ERROR: Operation would have caused one or more unique constraint violations. INDEX u_t_i(B+tree: 0|139|540) ON CLASS t(CLASS_OID: 0|486|2). key: 501(OID: 0|551|358). .. code-block:: sql INSERT INTO tbl SELECT 500 + ROWNUM FROM db_class a, db_class b; :: ERROR: Media recovery may be needed on volume "/home1/cubrid1/CUBRID/databases/testdb/testdb". 중복되는 키가 많아지면서 인덱스 노드의 분할 오류로 인해 INSERT 문 수행에 실패하는 문제(CUBRIDSUS-9829) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 중복되는 키가 많아 중복되는 레코드들의 주소 목록이 커진 상태에서, 인덱스의 리프 노드(leaf node)를 분할하며 위치할 노드를 잘못 선택하여 INSERT 문 수행에 실패하는 현상을 수정하였다. OR 연산자의 피연산자로 항상 거짓인 조건들이 주어졌을 때 질의 결과가 잘못되는 문제(CUBRIDSUS-10475) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql CREATE TABLE tab0 (col1 INTEGER); INSERT INTO tab0 VALUES (514); INSERT INTO tab0 VALUES (698); -- 아래 질의는 0건을 출력해야 하나 수정 이전 버전에서 2건을 출력하는 오류가 존재한다. SELECT * FROM tab0 WHERE (col1 BETWEEN 9 AND 2) OR (col1 BETWEEN 5 AND 4); 32비트 버전에서 LOB 타입의 데이터를 읽어들일 때 오류 발생하는 문제(CUBRIDSUS-10437) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql UPDATE tbl SET b = CHAR_TO_CLOB ('2test') WHERE a = 1; 질의 계획만 보도록 설정했음에도 불구하고 SELECT 문을 제외한 나머지 질의문 수행 시 응용 프로그램이 비정상 종료하는 문제(CUBRIDSUS-9771) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 질의 최적화 수준을 질의 계획만 보도록 설정했음에도 불구하고 SELECT 문을 제외한 INSERT, UPDATE, DELETE, REPLACE, TRIGGER, SERIAL 문 등 일부 SQL에 대해서는 응용 프로그램이 비정상 종료되는 문제가 존재했으나 SELECT 문을 제외한 나머지 질의문은 질의 계획이 출력되지 않게 수정했다. .. code-block:: sql SET OPTIMIZATION LEVEL 514; REPLACE INTO tbl (col1, col2, col3) VALUES (1, 2, 3); Windows 버전에서 자바 저장 프로시저를 수행하면서 질의 실행 계획을 출력할 때 실행 계획이 누적되어 출력되는 현상(CUBRIDSUS-10489) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. 6382 IN 절에 호스트 변수가 있으면 질의 실행 계획이 출력되지 않는 오류(CUBRIDSUS-9705) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ IN 절이 (?, ?, ...) 형태의 호스트 변수를 포함하면 질의 실행 계획이 출력되지 않는 오류를 수정했다. .. code-block:: sql ;plan detail SELECT * FROM tbl WHERE id IN (?, ?, ?); .. 6518 GROUP BY 절의 WITH ROLLUP 수정자 지정 시 수행 결과가 잘못될 수 있는 문제(CUBRIDSUS-9926) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ GROUP BY 절의 WITH ROLLUP 수정자를 지정하면 수행 결과가 잘못될 수 있는 문제를 수정했다. .. code-block:: sql -- 수정 이전 버전에서 다음 질의 수행 시, ROLLUP된 결과 값이 출력되지 않았다. SELECT a FROM t1 GROUP BY A WITH ROLLUP; -- 수정 이전 버전에서 다음 질의 수행 시, ROLLUP된 결과 레코드의 a 칼럼 값이 NULL인데 a>1 이므로 출력되지 않아야 하나 출력되었다. SELECT a, COUNT(*) FROM t1 GROUP BY a WITH ROLLUP HAVING a > 1; FROM 절을 생략한 질의문에서 SQL 함수의 입력 인자로 부질의가 지정되면 오류가 발생하는 현상(CUBRIDSUS-9949) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FROM 절을 생략한 질의문에서 SQL 함수의 입력 인자로 부질의가 지정되면 "ERROR: syntax is ambiguous" 오류가 발생하는 현상을 수정했다. .. code-block:: sql SELECT INET_NTOA ((SELECT 3232235530)); .. 8865 오버플로우 키가 separator로 사용된 인덱스에 대해 통계 정보를 갱신하면 서버 프로세스가 비정상 종료되는 문제(CUBRIDSUS-10027) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. 9500 NUMERIC 타입 칼럼에 호스트 변수를 이용하여 INSERT 수행 시 실패하는 문제(CUBRIDSUS-11366) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ NUMERIC 타입 칼럼에 대해 호스트변수를 이용하여 INSERT를 수행할 때, 사용자가 입력한 값이 NUMERIC의 기본 precision(15), scale(0)으로 변경되어 입력되는 문제를 수정했다. .. code-block:: sql CREATE TABLE tb2 (a NUMERIC (4,4)); PREPARE STMT FROM 'INSERT INTO tb2 VALUES (?)'; EXECUTE STMT USING 0.1; SELECT a FROM tb2; :: a ========== 0.0 .. code-block:: sql EXECUTE STMT USING 0.5; :: ERROR: A domain conflict exists on attribute "a". .. 6847 PREPARE 구문으로 CASE 또는 DECODE 문 수행 시 오류(CUBRIDSUS-11060) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PREPARE 구문으로 CASE 또는 DECODE 문 수행 시 모든 인자들이 호스트 변수로 주어지는 등 타입을 결정할 수 없을 때, " ERROR: Semantic: System error (generate var) in ../../src/parser/xasl_generation.c " 오류 메시지와 함께 질의 수행에 실패하는 현상을 수정했다. .. code-block:: sql PREPARE ST FROM 'SELECT CASE WHEN col = ? THEN ? ELSE ? END FROM tbl;' .. 6563 CHAR 타입 칼럼에 INT 타입을 바인딩하여 INSERT INTO ... SELECT ? ...질의 수행 시 오류(CUBRIDSUS-9293) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ INSERT INTO ... SELECT ? FROM db_root 질의 수행 시 CHAR 타입 칼럼에 INT 타입을 바인딩하면 " ERROR: A domain conflict exists on attribute *noname* " 오류 메시지와 함께 질의 수행에 실패하는 현상을 수정했다. .. code-block:: sql CREATE TABLE t (a CHAR (1)); PREPARE s FROM 'INSERT INTO t SELECT ? FROM db_root'; EXECUTE s USING 1; .. 8536 뷰 생성에 사용된 테이블의 이름을 변경한 후에 뷰에 대한 질의 수행 시 변경 이전의 테이블로 동작하는 문제(CUBRIDSUS-10741) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 뷰 생성에 사용된 테이블의 이름을 변경한 후에 뷰에 대한 질의를 수행하면 변경 이전의 테이블로 동작하는 문제를 수정했다. .. code-block:: sql CREATE TABLE foo (a INTEGER PRIMARY KEY, b VARCHAR (20)); INSERT INTO foo VALUES (1, 'foo'); CREATE TABLE bar (a INTEGER PRIMARY KEY, b VARCHAR (20)); INSERT INTO bar VALUES (1, 'bar'); CREATE VIEW v1 (a INTEGER, b VARCHAR (20)) AS SELECT * FROM foo; -- foo를 foo_old, bar를 foo로 이름을 변경한다. RENAME foo AS foo_old; RENAME bar AS foo; -- 수정 이전 버전에서는 Q1의 결과로 'bar', Q2의 결과로 'foo'를 출력하며, 수정 이후 버전에서는 둘 다 'bar'를 출력한다. SELECT b FROM foo; -- Q1 SELECT b FROM v1; -- Q2 .. 9148 in apricot UNION 질의에서 앞쪽 VARCHAR 타입 칼럼의 크기가 뒤쪽 칼럼의 크기보다 작을 때 오류가 발생하는 현상(CUBRIDSUS-9292) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UNION 질의에서 앞쪽 VARCHAR 타입 칼럼의 크기가 뒤쪽 칼럼의 크기보다 작으면 "ERROR: Execute: Query execution failure #1336." 오류 메시지와 함께 수행에 실패하는 현상을 수정했다. .. code-block:: sql CREATE TABLE u1 (a VARCHAR (1)); CREATE TABLE u2 (a VARCHAR (2)); INSERT INTO u1 VALUES ('1'); INSERT INTO u2 VALUES ('22'); SELECT a FROM (SELECT a FROM u1 UNION ALL SELECT a FROM u2) t(a); .. 4.4new PREPARE 문에서 ELSE 절 없는 CASE .. WHEN 절 또는 DEFAULT 인자 없는 DECODE 함수의 마지막 인자가 호스트 변수일 때 오류가 발생하는 현상(CUBRIDSUS-10405) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 수정 이전 버전의 CASE .. WHEN 절에서 ELSE 절을 지정하지 않고 마지막 THEN 절의 인자가 호스트 변수이면 오류가 발생하는 현상을 수정했다. .. code-block:: sql PREPARE st FROM 'select CASE ? WHEN 1 THEN 1 WHEN -1 THEN ? END'; EXECUTE st USING -1, 3; ERROR: Cannot coerce value of domain "integer" to domain "*NULL*". 수정 이전 버전의 DECODE 함수에서 DEFAULT 인자가 없고 result 인자가 호스트 변수이면 오류가 발생하는 문제를 수정했다. .. code-block:: sql PREPARE st FROM 'select DECODE (?, 1, 10,-1,?)'; EXECUTE st USING -1,-10; ERROR: Cannot coerce value of domain "integer" to domain "*NULL*". .. 4.4new, 4.4 & 9.2's each symptom is different 절대 경로를 포함한 LOB 파일 이름이 128보다 클 때 LOB 파일 경로를 출력하는 SELECT 문에서 응용 프로그램이 비정상 종료하는 문제(CUBRIDSUS-10856) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 절대 경로를 포함한 LOB 파일(LOB 타입의 실제 데이터를 저장한 파일) 이름이 128보다 클 때 LOB 파일 경로를 출력하는 SELECT 문에서 응용 프로그램이 비정상 종료하는 문제를 수정했다. .. code-block:: sql CREATE TABLE clob_tbl(c1 clob); SELECT * FROM clob_tbl; .. 4.4new 뷰를 포함하여 테이블 셋을 SELECT할 때 응용 프로그램이 비정상 종료되는 현상(CUBRIDSUS-11016) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql CREATE TABLE t (a int, b int); CREATE TABLE u (a int, b int); CREATE VIEW vt AS SELECT * FROM t; SELECT * FROM (vt, u); .. 4.4new 시스템 파라미터 max_plan_cache_entries의 값이 -1인 상태에서 INSERT 질의 수행 시 오류가 발생하면 같은 prepare문에 해당하는 질의는 계속해서 오류가 발생하는 문제(CUBRIDSUS-11038) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 시스템 파라미터 max_plan_cache_entries의 값이 -1(플랜 캐시 OFF)인 상태에서 첫 번째 INSERT 질의 수행 시 오류가 발생하면 같은 prepare문에 해당하는 질의는 바인딩되는 호스트 변수 값을 바꿔서 재수행해도 계속 같은 오류가 발생하는 문제를 수정했다. .. 4.4new 질의 계획 캐시를 사용하지 않는 질의문에서 사용되는 테이블 이름을 RENAME하고 기존 테이블을 DROP하는 경우 오류가 발생하는 문제(CUBRIDSUS-11039) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 시스템 파라미터 max_plan_cache_entries의 값을 -1로 설정하여 질의 계획 캐시를 사용하지 않거나 IN 절에 호스트 변수를 사용하는 경우와 같이 질의 계획 캐시를 사용하지 않는 질의문에서 사용되는 테이블 이름을 RENAME하고 기존 테이블을 DROP하는 경우, 해당 질의를 실행하면 "INTERNAL ERROR: Assertion 'false' failed" 오류가 발생하는 문제를 수정했다. +----------------------------------------+-------------------------------------------+ | T1 | T2 | +========================================+===========================================+ | SELECT * FROM foo WHERE id IN (?, ?); | | +----------------------------------------+-------------------------------------------+ | | CREATE TABLE foo_n AS SELECT * FROM foo; | | +-------------------------------------------+ | | RENAME foo AS foo_drop; | | +-------------------------------------------+ | | RENAME foo_n AS foo; | | +-------------------------------------------+ | | DROP TABLE foo_drop; | +----------------------------------------+-------------------------------------------+ | SELECT * FROM foo WHERE id IN (?, ?); | | +----------------------------------------+-------------------------------------------+ .. 4.4new 플랜 캐시를 OFF하고 특정의 다중 질의문을 수행하면 응용 프로그램이 비정상 종료하는 현상(CUBRIDSUS-11055) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cubrid.conf의 max_plan_cache_entries 값을 -1로 설정하여 플랜 캐시를 OFF하고 다중 질의문을 수행하면 응용 프로그램이 비정상 종료하는 현상을 수정했다. .. 4.4new 타입 형 변환이 필요한 비교 구문이 있는 질의 수행을 시도하면 응용 프로그램이 비정상 종료하는 현상(CUBRIDSUS-11064) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 타입 형 변환이 필요한 비교 구문이 있는 질의 수행을 시도하면 응용 프로그램이 비정상 종료하는 현상을 수정했다. 수정 이전 버전에서 아래의 예처럼 SELECT LIST에 함수가 사용되고 LIMIT 절이 사용되는 경우 발생했으며, 둘 중 어느 하나가 없는 경우 정상적으로 오류 메시지를 출력했다. .. code-block:: sql SELECT MIN(col_int) FROM cc WHERE cc. col_int_key >= 'vf' LIMIT 1; .. 4.4new 다중 칼럼 인덱스의 어떤 칼럼에 DESC가 있고, 다음 칼럼의 값이 NULL인 경우 해당 인덱스를 스캔하는 SELECT 문 수행 시 잘못된 결과를 출력하는 현상(CUBRIDSUS-11354) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql CREATE TABLE foo ( a integer primary key, b integer, c integer, d datetime ); CREATE INDEX foo_a_b_d_c on foo ( a , b desc , c ); INSERT INTO foo VALUES ( 1, 3, NULL, SYSDATETIME ); INSERT INTO foo VALUES ( 2, 3, NULL, SYSDATETIME ); INSERT INTO foo VALUES ( 3, 3, 1, SYSDATETIME ); SELECT * FROM foo WHERE a = 1 AND b > 3 ; :: -- In the previous version, above query shows a wrong result. a b c d ====================================================================== 1 3 NULL 12:23:56.832 PM 05/30/2013 .. 8931 in 9.1 부질의에 사용되는 ORDER BY 절의 칼럼이 부질의의 SELECT 리스트에 없는 경우 잘못된 결과를 출력하는 문제(CUBRIDSUS-11814) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 부질의(subquery)에 사용되는 ORDER BY 절의 칼럼이 부질의의 SELECT 리스트에 명시되지 않은 경우에 잘못된 결과를 출력하는 문제를 수정했다. .. code-block:: sql SELECT a FROM foo WHERE a IN (SELECT a FROM foo WHERE b = 'AAA' ORDER BY b, c); .. 아래 이슈 영문 있음. .. 4.4new 조인 계층 질의가 SELECT 리스트에 상관 부질의(correlated subquery)를 포함하고 있으면 잘못된 결과를 출력하는 현상(CUBRIDSUS-11658) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql CREATE TABLE t1(i INT); CREATE TABLE t2(i INT); INSERT t1 VALUES (1); INSERT t2 VALUES (1),(2); SELECT (SELECT COUNT(*) FROM t1 WHERE t1.i=t2.i) FROM t1,t2 START WITH t2.i=1 CONNECT BY NOCYCLE 1=1; 수정 이전 버전에서는 잘못된 결과를 출력한다. :: 1 1 수정 이후 버전부터는 올바른 결과를 출력한다. :: 1 0 .. 6365 in apricot 인덱스를 사용하며 ROWNUM 조건이 있는 계층 질의에서 질의 결과의 개수가 틀린 현상(CUBRIDSUS-9531) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 인덱스를 사용하며 ROWNUM 조건이 있는 계층 질의에서 질의 결과의 개수가 ROWNUM에 의해 제한되지 못하는 현상을 수정했다. .. code-block:: sql SELECT oid FROM foo WHERE ROWNUM = 1 START WITH oid = '1234567' CONNECT BY PRIOR poid = oid .. 4.4new CHAR 타입 칼럼이 연이어 정의된 테이블의 첫번째 칼럼을 CONV 함수에 입력하면 잘못된 결과를 반환하는 현상(CUBRIDSUS-11824) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CHAR 타입 칼럼이 연이어 정의된 테이블의 첫번째 칼럼을 CONV 함수에 입력하면 두번째 칼럼에 대한 CONV 값을 반환하는 현상을 수정했다. .. code-block:: sql CREATE TABLE tbl (h1 CHAR(1), p1 CHAR(4)); INSERT INTO tbl (h1, p1) VALUES ('0', '0001'); SELECT CONV (h1, 16, 10) from tbl; 1 .. 4.4new INSERT ... SELECT 문에서 SELECT 리스트와 INSERT 리스트의 타입이 달라 타입 변환이 발생하고, SELECT 문에 ORDER BY 절이 존재할 때 INSERT되는 순서가 달라지는 현상(CUBRIDSUS-12031) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ INSERT ... SELECT 문에서 SELECT 리스트와 INSERT 리스트의 타입이 달라 타입 변환이 발생하고, SELECT 문에 ORDER BY 절이 존재할 때 INSERT되는 순서가 달라지는 현상을 수정했다. INSERT 리스트 칼럼 중 AUTO_INCREMENT 칼럼이 존재하는 경우 INSERT되는 순서가 중요하게 된다. .. code-block:: sql CREATE TABLE t1 (id INT AUTO_INCREMENT, a CHAR(5), b CHAR(5), c INT); CREATE TABLE t2 (a CHAR(30), b CHAR(30), c INT); INSERT INTO t2 VALUES ('000000001', '5', 1),('000000002','4',2),('000000003','3',3),('000000004','2',4),('000000005','1',5); INSERT INTO t1(a,b,c) SELECT * FROM t2 ORDER BY a, b DESC; SELECT * FROM t1; HA -- .. 6511 응용 프로그램에서 처음 DB에 접속했던 사용자의 소유로 슬레이브 노드에 스키마가 복제되는 현상(CUBRIDSUS-11878) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 응용 프로그램에서 처음 DB에 접속했던 사용자의 소유로 슬레이브 노드에 스키마가 복제되는 현상으로, 예를 들어 user1 계정으로 DB에 접속했다가 종료한 후 다시 user2 계정으로 접속하여 테이블을 생성하면 슬레이브 노드에는 처음에 접속했던 user1 소유로 테이블이 생성되었다. 이 문제는 브로커 응용 서버(CAS)를 재시작하지 않는 한 지속되었으나, 이를 수정했다. 노드 상태가 변경되는 경우에 대한 로그 정보 추가(CUBRIDSUS-9748) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HA 환경에서 노드 상태가 변경되는 경우 다음 로그 정보를 추가하도록 수정했다. 이 정보는 error_log_level 시스템 파라미터의 값이 error 이하인 경우에 에러 로그 파일에 기록된다. * cub_master 프로세스의 로그 정보는 $CUBRID/log/_master.err 파일에 저장되며 다음의 내용이 기록된다. :: HA generic: Send changemode request to the server. (state:1[active], args:[cub_server demodb ], pid:25728). HA generic: Receive changemode response from the server. (state:1[active], args:[cub_server demodb ], pid:25728). * cub_server 프로세스의 로그 정보는 $CUBRID/log/server/__